package msu.ml.data.level2;

import java.util.*;

/**
 * A Volume Coverage Pattern determines the number
 * of scans in a volume scan, the angles of those
 * scans, and the type of data collected by each
 * scan.
 *
 * @author Reginald M Mead
 * @version 1.0
 */
public interface IVolumeCoveragePattern 
{

	/**
	 * Get the angle of the scan(sweep) at
	 * the specified index.
	 *
	 * @param scanIndex index of scan
	 * @return angle of scan
	 */
	public float getAngle(int scanIndex);

   public float [] getAngles();

	/**
	 * Get the indexes of all scans with the
	 * specified elevation angle.
	 *
	 * @param angle angle of scans
	 * @return an ArrayList of indexes
	 */
	public ArrayList<Integer> getIndexesForAngle(float angle);

	/**
	 * Get the number of different elevation angles
	 * in this pattern.
	 *
	 * @return the number of different elevation angles
	 */
	public int getNumAngles();

	/**
	 * Get the number of scans in this pattern.
	 *
	 * @return the number of scans
	 */
	public int getNumScans();

	/**
	 * Get the total scan time for one volume
	 * scan using this pattern.
	 *
	 * @return the total time for a volume scan
	 */
	public int getTotalScanTime();

	/**
	 * Returns true if the scan at the specified
	 * angle contains doppler information.
	 *
	 * @param scanIndex index of scan
	 * @return true if scan contains doppler data
	 */
	public boolean isDopplerScan(int scanIndex);

	/**
	 * Returns true if the scan at the specified
	 * angle contains reflectivity information.
	 *
	 * @param scanIndex index of scan
	 * @return true if scan contains reflectivity data
	 */
	public boolean isReflectivityScan(int scanIndex);

}
